/**
 * Copyright(c) 2013 Jade Techonologies Co., Ltd.
 *
 * History:
 *   14-7-28 上午11:59 Created by dwzhang
 */
package com.jade.framework.base.comm;

/**
 * 协议配置。本接口只是定义通常协议会出现的配置，具体的协议还会有自定义的扩展配置。
 *
 * @author dwzhang
 * @version 1.0 14-7-28 上午11:59
 */
public interface ProtocolConfiguration
{
    /**
     * 返回协议名称。
     *
     * @return 协议名称
     */
    public String getName();

    /**
     * 客户端时，为服务端地址；服务器端时，为侦听的地址。
     *
     * @return 主机地址。
     */
    public String getHost();

    /**
     * 客户端时，为服务端端口；服务器端时，为侦听端口。
     *
     * @return 端口。
     */
    public int getPort();

    /**
     * 连接超时时间，主要用于客户端. 单位毫秒。
     *
     * @return 连接超时时间。
     */
    public int getConnectTimeout();

    /**
     * IO超时时间，单位毫秒。
     *
     * @return IO超时时间
     */
    public int getSoTimeout();

    /**
     * 是否自动建立连接。
     *
     * @return 是否自动建立连接。
     */
    public boolean isAutoConnect();

    /**
     * 是否是长连接。
     *
     * @return 长连接返回true;否则返回false.
     */
    public boolean isLongTerm();

    /**
     * 心跳报文发送周期，为0表示无心跳报文，单位为毫秒.
     *
     * @return 心跳报文发送周期。
     */
    public int getPingPeriod();

    /**
     * 最大队列长度，对于NIO来说，意义不大。
     *
     * @return Socket中的最大队列长度。
     */
    public int getBacklog();

    /**
     * 消息最大长度，字节数。
     *
     * @return 消息最大长度。
     */
    public int getMaxMessageLength();

    /**
     * 滑动窗口大小。
     *
     * @return 滑动窗口大小
     */
    public int getWindowSize();

    /**
     * 窗口满时最大等待时间，毫秒。
     *
     * @return 最大等待时间
     */
    public int getWindowWaitTimeout();

    /**
     * 窗口监控时间间隔，毫秒。
     *
     * @return 监控时间间隔
     */
    public int getWindowMonitorInterval();

    /**
     * 无响应请求超时时间,毫秒。
     *
     * @return 毫秒。
     */
    public int getRequestExpiryTimeout();

}
